﻿using System.Collections.Generic;
using System.Linq;

namespace Szabalyrendszer
{
    /// <summary>
    /// O felelos a csatateren resztvevok szamontartasara, es az esetleges egyebb kellekek
    /// </summary>
    public class Csatater
    {
        public Dictionary<KarakterLap, Cselekvo> Resztvevok { get; set; }
        public List<KarakterLap> Harcolok { get; set; }
        public List<Cselekvo> Jatekosok { get; set; }
        public HarciHelyzetSzamontarto HarciHelyzetSzamontarto { get; set; }
        public int AktualisSzegmens { get; set; }
        public int AktualisKor { get; set; }
        public Queue<Cselekvo> CselekvesiSorrend { get; set; }

        public void UjResztvevoHozzadasa(KarakterLap karakterlap, Cselekvo cselekvo)
        {
            Resztvevok.Add(karakterlap, cselekvo);
        }

        public void Init()
        {
            foreach (var resztvevo in Resztvevok)
            {
                foreach (var kepzettseg in resztvevo.Key.Kepzettsegek.Where(k => k.EngedelyezettHarciCsel.Any()))
                {
                    resztvevo.Value.HarciCselek.AddRange(kepzettseg.EngedelyezettHarciCsel);
                }
            }
        }

        //Kesobbi Fejlesztes:
        //relativisztikuskezdemenyezes pl a hatulrol tamadas miadt a celpont elveszti a fegyvere(i) Ke-t
        //forditott sorrend szambavetele cselekveskor
        public void KorLebonyolitas()
        {
            if (Beallitasok.Instancia.StatikusKorok)
            {
                //jobb lenne egy hoszabb ido skalat letrehozni amin elhelyezed a kulombozo cselekedeteket a karakterekkel es amikor eljon az ido akkor aktivalni az adott cselekedetet

                //kezdemenyezes, egyelore egyszeruen
                //lekerni a cselekvoktol a kezdemenyezo dobasokat erre a korre
                //lekerni a harci helyzet szamontartotol az aktualis Ke-ket
                var kezdemenyezoDobasok = new Dictionary<KarakterLap, int>();
                var cselekedetekIdoigenye = new Dictionary<KarakterLap, List<int>>();

                foreach (var resztvevok in Resztvevok)
                {
                    cselekedetekIdoigenye.Add(resztvevok.Key, resztvevok.Value.CselekIdoigenye());
                }

                foreach (var resztvevo in Resztvevok)
                {
                    kezdemenyezoDobasok.Add(resztvevo.Key, resztvevo.Value.KockaDobasKeres(10) + HarciHelyzetSzamontarto.AktualisKe(resztvevo.Key));
                }


            }


            //megkerdezni a cselekvotol hogy ki mit csinal
            //kezdemenyezes sorrendbe, kiszamolni a kulonbozo mozzanatok idopontjait szegmensre bontva
            //vegrehajtani a cseleket a harci helyzet szamontartoval
        }

        public void Cselekves(string kerakterNev, string celpontNev, List<HarciCsel> harciCselek)
        {
            KidobottSebzes sebzes = new KidobottSebzes();
            HarciHelyzetSzamontarto.TamadoCsel(Harcolok.First(h => h.Nev == kerakterNev), Harcolok.First(h => h.Nev == celpontNev), harciCselek, sebzes);
        }
    }
}
